package com.quantoeugasto.controle;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.quantoeugasto.entidade.Usuario;
import com.quantoeugasto.servico.UsuarioService;

@Controller
public class LoginController {
	
	private Logger logger = Logger.getLogger("logger");
	
	@Autowired
	private UsuarioService usuarioService;
	
	@RequestMapping(value = "/login.html")
	public String showLoginPage(HttpSession session){
		
		String usuario = (String) session.getAttribute("usuario");
		
		if (usuario != null){
			return "aplicacao";
		}else{
			return "login";
		}
		
	}

	@RequestMapping(value = "/doLogon.html")
	public @ResponseBody Map<String, Object> doLogon (@RequestParam("user") String usuario, @RequestParam("senha") String senha, HttpSession session) throws Exception{

		Map<String, Object> map = new HashMap<String, Object>();
		
		Usuario u = this.usuarioService.consultar(new Usuario(usuario));
		
		if (u == null){
			map.put("success", false);
			map.put("errorMsg", "O usuário " + usuario + " não existe!");
		}else if (!senha.equals(u.getSenha())){
			map.put("success", false);
			map.put("errorMsg", "Senha incorreta!");
		}else{
			session.setAttribute("usuario", usuario);
			map.put("success", true);
		}
		
		logger.info("Usuário " + usuario + " logou!");
		
		return map;
	}

	@RequestMapping(value = "/logout.html")
	public String doLogout(HttpSession session){
		String usuario = (String) session.getAttribute("usuario");
		logger.info("Usuário " + usuario + " deslogou!");
		session.invalidate();
		return "login";
	}

	@RequestMapping(value = "/cadastrarUsuario.html")
	public @ResponseBody Map<String, Object> cadastrarUsuario (@RequestParam("user") String usuario, @RequestParam("nome") String nome,
			@RequestParam("sobrenome") String sobrenome, @RequestParam("senha") String senha, HttpSession session) throws Exception{
		
		logger.debug("Cadastrando usuário: " + usuario);
		Map<String, Object> map = new HashMap<String, Object>();
		
		if (usuario == null || usuario.trim().length() == 0){
			String msgErro = "O usuário não foi informado!";
			logger.error(msgErro);
			map.put("success", false);
			map.put("msg", msgErro);
			return map;
		}
		
		if (senha == null || senha.trim().length() == 0){
			String msgErro = "A senha não foi informada!";
			logger.error(msgErro);
			map.put("success", false);
			map.put("msg", msgErro);
			return map;
		}
		
		Usuario newUser = new Usuario(usuario, senha, nome, sobrenome);
		
		try{
			usuarioService.inserir(newUser);
		}catch (Exception e) {
			String msgErro = "Ocorreu um erro inexperado ao cadastrar o usuário!!";
			logger.error(msgErro, e);
			map.put("success", false);
			map.put("msg", msgErro);
			return map;
		}

		map.put("success", true);
		map.put("usuarioCadastrado", nome);
		
		logger.debug("Usuário " + usuario + " cadastrado com sucesso!");
		
		return map;
	}

}
